import Vue from "vue";

import Vuex from "vuex";

Vue.use(Vuex);

//new Vuex.Store 的时候初始化 state 的值
//在本地存储中读取 state 的值
let stateStr = localStorage.getItem("state");
//初始化 state 变量
let initState = {
  tokenInfo: {},
};
if (stateStr) {
  //存在该值
  initState = JSON.parse(stateStr);
}
export default new Vuex.Store({
  state: initState,
  mutations: {
    //定义更新 token 的方法
    updateTokenInfo(state, payload) {
      //state指向第一个 state 对象 payload 接收传过来的 token 信息
      //把更新后的 token 存在 tokenInfo 中
      state.tokenInfo = payload;
      //console.log(state.tokenInfo);
      //token 发生改变的时候调用 saveStateToStorage 方法将最新数据保存到本地
      //在一个 mutationA 中调用另一个 mutationB 通过 commit 方法
      //this表示 new Vuex.Store 得到的实例对象
      this.commit("saveStateToStorage");
    },

    //vuex中的数据是存储在内存中一旦浏览器关闭数据就会被销毁
    //将 vuex 中的数据持久化存储到本地 localSotrage
    //定义将 vuex 中的数据存储到 localStorage 中的函数
    saveStateToStorage(state) {
      //state指向第一个state对象
      localStorage.setItem("state", JSON.stringify(state));
    },
  },
});
